package 继承.子类构造方法;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-16
 * Time: 16:07
 */
public class Test {
    public static void main(String[] args) {
        Derived derived = new Derived();
    }
}

/*
执行结果：
Base()
Derived()
 */

/*
在子类构造方法中，并没有写任何关于基类构造的代码，但是在构造子类对象的时候，先执行基类的构造方法，然后执行
子类的构造方法，因为：子类对象中成员是由两部分组成，基类继承下来的以及子类自己新增的部分，父子父子肯定是先有父类再有子类，所以在构造子类对象时候，先要调用基类的构造方法，将从基类继承下来的成员构造方法完整，
然后再调用子类自己的构造方法，将子类自己新增的成员初始化完整。

【注意】
    1. 若父类显式定义无参的构造方法，在子类构造方法第一行默认有隐藏的super()调用。即调用基类构造方法
    2. 如果父类构造方法是带有参数的，此时需要用户为子类显示定义构造方法，并在子类构造方法中选择合适的父类构造方法调用，否则编译失败。
    3. 在子类构造方法中，super()调用父类构造方法时，必须不能和this同时出现
 */